<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 原型链 

        // 对象是有自身和原型构成 ，原型又是一个对象。。。原型链

        // let obj = {
        //     name:"张三",
        //     age:20
        // }
        // let obj2 = new Object();
        // obj2.name = "李四";
        // obj2.age = 21;

        // let obj = {
        //     name:"张三",
        //     age:20
        // }

        // // console.log(obj);
        // Object.setPrototypeOf(obj,{
        //     height:"178cm"
        // })

        // console.log(obj);

        // 顶层的原型 是null
        // console.log(  Object.prototype.__proto__);


        // 对象的属性或者方法查找顺序；
        // 对象先在自身查找属性和方法 ，如果没有找到 在原型上查找 ，
        // 如果还没有找到会在原型链上查找，如果还没找到就返还undefined；

        // Object.prototype.age = 30;

        // function Person(){
        //     // this.age = 10;
        // }

        // // Person.prototype.age = 20;


        // let zhangsan = new Person();
        // console.log(zhangsan.age);

        // 找自身 ，在原型，找原型链，如果都没有返还undefined；



        //注意： 对象的循环问题，for in :会循环自身和原型链上的内容；
        Object.prototype.num = "10";

        let obj = {
            name:"张安",
            age:20
        }

        Object.setPrototypeOf(obj,{height:"178cm"});
        console.log(obj);
        for(let key in obj){
           if( obj.hasOwnProperty(key)){
                console.log(key);
           }
           
        }


        // 通过一个函数判断 某个属性或者方法是否是对象的自身属性和方法；obj.hasOwnProperty('key');


    </script>
</body>
</html>